package com.baizhi.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
 * Mybatis 为什么要写Mapper文件？
 * 1. Sql
 * 2. 映射规则 字段和属性如何一一对应
 *
 * MybatisPlus 没有Mapper 需要一些东西取代Mapper文件的作用
 * 1. Sql MybatisPlus在运行的时候会自动生成【不需要写Sql】
 * 2. 需要通过MybatisPlus的注解在实体类中定义属性和字段映射关系
 *
 * 表名注解 @TableName 和 非主键属性 @TableField 在以下情况中可以不写
 * - 实体类命名 严格按照驼峰命名法定义了
 * 表名          类名
 * bz_admin ----> BzAdmin
 * 字段名    属性名
 * username  ----> username
 * admin_id  ----> adminId
 *
 * - 实体类类名 属性名 和 表名字段名 字母完全一致
 */
//@TableName("bz_admin")
@Data
public class BzAdmin implements Serializable , UserDetails {
    /**
     * 三种属性
     * 1 主键属性  @TableId(value = "id",type = IdType.AUTO)
     * value 主键的字段名 type 自增类型 【该注解必须写】
     * <p>
     * 2 非主键属性  @TableField("username") 参数字段名
     * <p>
     * 3 在数据库中不存在的属性     @TableField(exist = false) 当前属性在数据库中不存在
     * 【该注解必须写】
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    //    @TableField("username")
    private String username;
    //    @TableField("password")
    private String password;
    @TableLogic(
            value = "0",
            delval = "1"
    )
    private Integer status = 0;
    @TableField(exist = false)
    private List<BzAdmin> list;

    /**
     * 封装授权信息
     */
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    /**
     *  账户失效
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 账户锁定
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 凭证信息失效
     *
     * Credential 凭证信息 就是密码的意思
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 账户可用性
     */
    @Override
    public boolean isEnabled() {
        return true;
    }
}
